package model.dao;

import java.util.ArrayList;

public abstract class LeitorDeDados {
    
    /**
     * Função que importa dados de um tipo T de um arquivo texto.
     * @param <T> - tipo de dados que deverá ser retornado.
     * @param fonte - caminho do arquivo texto.
     * @return Uma lista do tipo T.
     * @throws Exception 
     */
    public abstract <T extends Object> ArrayList<T> importarDados(String fonte) throws Exception;
    
    /**
     * Função que processa a linha do arquivo texto instanciando um objeto do tipo T.
     * @param <T> - tipo do dado que deverá ser retornado.
     * @param linha - linha do arquivo texto.
     * @return um objeto do tipo T.
     * @throws Exception Se ocorrer algum problema ao instânciar o objeto.
     */
    public abstract <T extends Object> T processaLinha(String [] linha) throws Exception;
    
    /**
     * Função que lê os dados de um arquivo texto.
     * @param <T> - tipo de dados que deve ser retornado;
     * @param fonte - caminho do arquivo texto.
     * @return Uma lista do tipo T com os dados do arquivo.
     * @throws Exception Se ocorrer algum problema ao ler o arquivo.
     */
    protected <T extends Object> ArrayList<T> lerDados(String fonte) throws Exception {
        return null;
    }
    
}
